The present invention generally relates to storage area networks (SANs) using Redundant Arrays of Independent Disks (RAID) and more specifically to transferring and mirroring data in a virtual storage environment.
A traditional RAID controller performs many tasks connected with writing and reading data to and from individual disk drives. It must maintain the redundancy arrangement depending on the type of RAID used, handle recovery from errors, and reorganize the data as needed.
One method of ensuring the reliable access to data is data mirroring. Data mirroring involves maintaining multiple copies of data in different mirrored locations. In order to generate mirrored copies of data, data from a source location is copied to a destination location. Typically, the process of copying data involves first sending a read command to the source location. Then, data to be mirrored is read from the source location and stored in a buffer as the data is received. Once the process of reading data is started, a write command is issued to the destination location. When the destination location is ready to receive data, the data is read out of the buffer and transferred to the destination location.
The above method of mirroring data has many disadvantages. Because a read command is sent before a write command, data is sent from the source before the destination is ready to receive the data. Thus, data is stored in the buffer until the destination is ready to receive data. This may result in a large amount of data being stored in the buffer during the mirroring process. Therefore, a buffer that is capable of storing large amounts of data is necessary.
A typical storage controller would require its own large buffer to handle the data mirroring, error recovery, and other RAID functions for moving data between the physical storage arrays.
In a network environment, routers are used to route packets of data to destinations without any intention of buffering the data packets, thus sending the data at “wire speed”. This is possible because the packets of data sent are relatively small. Achieving wire speed for large bulk data transfers for applications, such as are necessary for mirroring, error recovery, and other RAID functions by a network storage server over a network is problematic.